perm filename INTEGE.AX[W78,JMC] blob sn#313371 filedate 1978-02-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	DECLARE INDVAR u v w x y z ε NATNUM
C00004 ENDMK
C⊗;
DECLARE INDVAR u v w x y z ε NATNUM;
DECLARE OPCONST suc pred(NATNUM)=NATNUM;
DECLARE OPCONST +(NATNUM,NATNUM)=NATNUM [R←450,L←455];
DECLARE OPCONST *(NATNUM,NATNUM)=NATNUM [R←550,L←555];
DECLARE PREDPAR P 1;

AXIOM 	S:
	SUCC:	∀x.¬(0=suc(x));
	ONEONE:	∀x y.(suc(x)=suc(y)⊃x=y);
	PLUS:	∀x.x+0=0
		∀x y.x+suc(y)=suc(x+y);
	TIMES:  ∀x.x*0=0
		∀x y.x*suc(y)=(x*y)+y;

	INDUCT:	P(0) ∧ ∀x.(P(x)⊃P(suc(x))) ⊃ ∀x.P(x); ;;

REPRESENT {NATNUM} AS NATNUMREP;
ATTACH suc  ↔ (LAMBDA (X) (ADD1 X));
ATTACH pred ↔ (LAMBDA (X) (COND ((GREATERP X 0)(SUB1 X)) (T 0)));
ATTACH +    ↔ (LAMBDA (X Y) (PLUS X Y));
ATTACH *    ↔ (LAMBDA (X Y) (TIMES X Y));

DECLARE OPCONST fact(NATNUM)=NATNUM;
AXIOM FACT: ∀x.fact(x)=IF x=0 THEN 1 ELSE x*fact(pred(x)) ;;